﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Bukstor.Biz;
using Bukstor.Admin.UI.Utilidades;

namespace Bukstor.Admin.UI
{
    public partial class Pedidos : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            ((Label)this.Master.FindControl("lblTitulo")).Text = "PEDIDOS";   
        }

        protected void btnActualizar_Click(object sender, EventArgs e)
        {
            gvPedidos.DataBind();
        }

        public IEnumerable<FilaPedido> TraerPedidos(int idPedido, int estado, string nombre,
            string apellido, string email, string usuario)
        {
            BukstorBDEntities Entidades = new BukstorBDEntities();
            IEnumerable<Pedido> resultado = from Pedido P in Entidades.Pedidos
                                            where (idPedido == 0 || idPedido == P.id)
                                            && (estado == 0 || estado == P.Estado.idEstado)
                                            && (nombre == null || nombre == "" || P.Cliente.nombre.Contains(nombre))
                                            && (apellido == null || apellido == "" || P.Cliente.apellido.Contains(apellido))
                                            && (email == null || email == "" || P.Cliente.e_mail.Contains(email))
                                            && (usuario == null || usuario == "" || P.Cliente.username.Contains(usuario))
                                            select P;
            List<FilaPedido> salida = new List<FilaPedido>(resultado.Count());
            foreach (Pedido P in resultado)
            {
                if (!P.ClienteReference.IsLoaded) P.ClienteReference.Load();
                if (!P.DireccionReference.IsLoaded) P.DireccionReference.Load();
                if (!P.EstadoReference.IsLoaded) P.EstadoReference.Load();
                FilaPedido fila = new FilaPedido();
                fila.Cliente = P.Cliente.ToString();
                fila.Direccion = P.Direccion.ToString();
                fila.Estado = P.Estado.ToString();
                fila.IdEstado = P.Estado.idEstado;
                fila.Fecha = P.fecha;
                fila.ID = P.id;
                fila.Importe = P.importe;
                fila.Rastreo = P.codigoRastreo;
                salida.Add(fila);
            }
            return salida.ToArray();
        }

        public void ActualizarPedido(int ID, string Estado, string Rastreo)
        {
            BukstorBDEntities entidades = new BukstorBDEntities();
            int id = ID;
            EstadoDelPedido estado = entidades.EstadosDeLosPedidos.First(i => i.nombre == Estado);
            Pedido P = entidades.Pedidos.First(i => i.id == id);
            if (!P.EstadoReference.IsLoaded) P.EstadoReference.Load();
            if (P.Estado.idEstado!=5&&estado.idEstado==5)
            {
                if (!P.LineasDelPedido.IsLoaded) P.LineasDelPedido.Load();
                foreach (Linea l in P.LineasDelPedido)
                {
                    if (!l.LibroReference.IsLoaded) l.LibroReference.Load();
                    if (!l.Libro.InventarioReference.IsLoaded) l.Libro.InventarioReference.Load();
                    l.Libro.Inventario.cantidad += l.cantidad;
                }
            }
            P.Estado = estado;
            P.codigoRastreo = Rastreo;
            entidades.SaveChanges();
            ReglasInventario.EjecutarReglasDeActualización();
        }

        protected void btnBorrar_Click(object sender, EventArgs e)
        {
            txtFiltroApellido.Text = "";
            txtFiltroEmail.Text = "";
            txtFiltroId.Text = "";
            txtFiltroNombre.Text = "";
            txtFiltroUsuario.Text = "";
            ddlFiltroEstado.SelectedIndex = 0;
        }

        protected void SeleccionarEstado(object sender, EventArgs e)
        {
            if (hidCargoEstado.Value == "0")
            {
                int index = gvPedidos.EditIndex;
                int id = (int)gvPedidos.DataKeys[index].Value;
                BukstorBDEntities entidades = new BukstorBDEntities();
                DropDownList ddlEditarEstado = sender as DropDownList;
                Pedido P = entidades.Pedidos.First(i => i.id == id);
                P.EstadoReference.Load();
                ddlEditarEstado.SelectedIndex = P.Estado.idEstado - 1;
                if (ddlEditarEstado.SelectedIndex==2|ddlEditarEstado.SelectedIndex==4)
                {
                    ddlEditarEstado.Enabled = false;
                }
                hidCargoEstado.Value = "1";
            }
        }

        protected void gvPedidos_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            int index = gvPedidos.EditIndex;
            GridViewRow row = gvPedidos.Rows[index];
            DropDownList estado = row.FindControl("ddlEditarEstado") as DropDownList;
            e.NewValues["Estado"] = estado.SelectedItem.Text;
            hidCargoEstado.Value = "0";
        }

        protected void gvPedidos_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            hidCargoEstado.Value = "0";
        }

        protected void gvPedidos_RowEditing(object sender, GridViewEditEventArgs e)
        {
            hidCargoEstado.Value = "0";
        }
    }
}
